package tencent;

import java.util.Scanner;

public class _2_最小拆分次数 {
    //题目描述
    //一次操作定义如下:
    //要么把所有数减去1
    //要么把一个数拆成两个加起来和等于它的数
    //但是允许拆的次数为m
    //问把n减到0的 最少操作次数
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int now = scan.nextInt();
        int more = scan.nextInt();
        int dp[][] = new int[now+1][more+1];
        for(int i=0;i<=more;++i){
            dp[0][i] = 0;
        }
        for(int i=1;i<=now;++i){//当前有i个 最低也是拆i次
            for(int j=1;j<=Math.min(i,more);++j){//表示当前还有多少次可以拆
                int best = i;
                for(int k=1;k<=i/2;++k){//拆分后的最优解
                    best = Math.min(dp[k][j-1]+dp[i-k][j-1]+1,best);
                }
                dp[i][j] = Math.min(1+dp[i-1][j],best);
            }
        }
        scan.close();
        System.out.println(dp[now][more]+1);
    }
}
